# [Network] Blocking/Non-blocking & Synchronous/Asynchronous
๋๊ธฐ/๋น๋๊ธฐ๋ ์ฐ๋ฆฌ๊ฐ ์ผ์ ์ํ์์ ๋ง์ด ๋ค์ ์ ์๋ ๋ง์ด๋ค.
Blocking๊ณผ Synchronous, ๊ทธ๋ฆฌ๊ณ Non-blocking๊ณผ Asysnchronous๋ฅผ
์๋ก ๊ฐ์ ๊ฐ๋
์ด๋ผ๊ณ ์ฐฉ๊ฐํ๊ธฐ ์ฝ๋ค.
๊ฐ์ ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ์ง๋์ง ๊ฐ๋จํ๊ฒ ์ดํด๋ณด์
homoefficio (opens new window)๋ ๋ธ๋ก๊ทธ์ ๋์จ 2๋2 ๋งคํธ๋ฆญ์ค๋ก ์ ์ ๋ฆฌ๋ ์ฌ์ง์ด๋ค. ์ด ์ฌ์ง๋ง ๋ณด๊ณ ๋ชจ๋ ์ดํด๊ฐ ๋๋ค๋ฉด, ์ฐจ์ด์ ์ ๋ํด ์ ์๊ณ ์๋ ๊ฒ์ด๋ค.
# Blocking/Non-blocking
๋ธ๋ญ/๋
ผ๋ธ๋ญ์ ๊ฐ๋จํ ๋งํด์ ํธ์ถ๋ ํจ์
๊ฐ ํธ์ถํ ํจ์
์๊ฒ ์ ์ด๊ถ์ ๊ฑด๋ค์ฃผ๋ ์ ๋ฌด์ ์ฐจ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
ํจ์ A, B๊ฐ ์๊ณ , A ์์์ B๋ฅผ ํธ์ถํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ด๋ ํธ์ถํ ํจ์๋ A๊ณ , ํธ์ถ๋ ํจ์๋ B๊ฐ ๋๋ค. ํ์ฌ B๊ฐ ํธ์ถ๋๋ฉด์ B๋ ์์ ์ ์ผ์ ์งํํด์ผ ํ๋ค. (์ ์ด๊ถ์ด B์๊ฒ ์ฃผ์ด์ง ์ํฉ)
- Blocking : ํจ์ B๋ ๋ด ํ ์ผ์ ๋ค ๋ง์น ๋๊น์ง ์ ์ด๊ถ์ ๊ฐ์ง๊ณ ์๋๋ค. A๋ B๊ฐ ๋ค ๋ง์น ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
- Non-blocking : ํจ์ B๋ ํ ์ผ์ ๋ง์น์ง ์์์ด๋ A์๊ฒ ์ ์ด๊ถ์ ๋ฐ๋ก ๋๊ฒจ์ค๋ค. A๋ B๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉด์๋ ๋ค๋ฅธ ์ผ์ ์งํํ ์ ์๋ค.
์ฆ, ํธ์ถ๋ ํจ์์์ ์ผ์ ์์ํ ๋ ๋ฐ๋ก ์ ์ด๊ถ์ ๋ฆฌํดํด์ฃผ๋๋, ํ ์ผ์ ๋ง์น๊ณ ๋ฆฌํดํด์ฃผ๋๋์ ๋ฐ๋ผ ๋ธ๋ญ๊ณผ ๋ ผ๋ธ๋ญ์ผ๋ก ๋๋์ด์ง๋ค๊ณ ๋ณผ ์ ์๋ค.
# Synchronous/Asynchronous
๋๊ธฐ/๋น๋๊ธฐ๋ ์ผ์ ์ํ ์ค์ธ ๋์์ฑ
์ ์ฃผ๋ชฉํ์
์๊น์ฒ๋ผ ํจ์ A์ B๋ผ๊ณ ๋๊ฐ์ด ์๊ฐํ์ ๋, B์ ์ํ ๊ฒฐ๊ณผ๋ ์ข ๋ฃ ์ํ๋ฅผ A๊ฐ ์ ๊ฒฝ์ฐ๊ณ ์๋ ์ ๋ฌด์ ์ฐจ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- Synchronous : ํจ์ A๋ ํจ์ B๊ฐ ์ผ์ ํ๋ ์ค์ ๊ธฐ๋ค๋ฆฌ๋ฉด์, ํ์ฌ ์ํ๊ฐ ์ด๋ค์ง ๊ณ์ ์ฒดํฌํ๋ค.
- Asynchronous : ํจ์ B์ ์ํ ์ํ๋ฅผ B ํผ์ ์ง์ ์ ๊ฒฝ์ฐ๋ฉด์ ์ฒ๋ฆฌํ๋ค. (Callback)
์ฆ, ํธ์ถ๋ ํจ์(B)๋ฅผ ํธ์ถํ ํจ์(A)๊ฐ ์ ๊ฒฝ์ฐ๋์ง, ํธ์ถ๋ ํจ์(B) ์ค์ค๋ก ์ ๊ฒฝ์ฐ๋์ง๋ฅผ ๋๊ธฐ/๋น๋๊ธฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋น๋๊ธฐ๋ ํธ์ถ์ Callback์ ์ ๋ฌํ์ฌ ์์ ์ ์๋ฃ ์ฌ๋ถ๋ฅผ ํธ์ถํ ํจ์์๊ฒ ๋ตํ๊ฒ ๋๋ค. (Callback์ด ์ค๊ธฐ ์ ๊น์ง ํธ์ถํ ํจ์๋ ์ ๊ฒฝ์ฐ์ง ์๊ณ ๋ค๋ฅธ ์ผ์ ํ ์ ์์)
์ ๊ทธ๋ฆผ์ฒ๋ผ ์ด 4๊ฐ์ง์ ๊ฒฝ์ฐ๊ฐ ๋์ฌ ์ ์๋ค. ์ด๊ฑธ ์ข ๋ ์ดํดํ๊ธฐ ์ฝ๊ฒ Case ๋ณ๋ก ์์๋ฅผ ํตํด ๋ณด๋ฉด์ ์ดํดํ๊ณ ๋์ด๊ฐ๋ณด์
์ํฉ : ์นํจ์ง์ ์ง์ ์นํจ์ ์ฌ๋ฌ๊ฐ
# 1) Blocking & Synchronous
๋ : ์ฌ์ฅ๋ ์นํจ ํ๋ง๋ฆฌ๋ง ํฌ์ฅํด์ฃผ์ธ์
์ฌ์ฅ๋ : ๋ค ๊ธ๋ฐฉ๋๋๊น ์ ์๋ง์!
๋ : ๋น
-- ์ฌ์ฅ๋ ์นํจ ํ๊ธฐ๋ ์ค--
๋ : (์ ์ธ์ ๋์ง?..๊ถ๊ธํ๋ฐ ๊ทธ๋ฅ ๋ฉ๋ฑํ ์์ ์นํจ ํ๊ธฐ๋๊ฑฐ ๋ณด๋ฉด์ ๊ธฐ๋ค๋ฆผ)
# 2) Blocking & Asynchronous
๋ : ์ฌ์ฅ๋ ์นํจ ํ๋ง๋ฆฌ๋ง ํฌ์ฅํด์ฃผ์ธ์
์ฌ์ฅ๋ : ๋ค ๊ธ๋ฐฉ๋๋๊น ์ ์๋ง์!
๋ : ์ ๋น
-- ์ฌ์ฅ๋ ์นํจ ํ๊ธฐ๋ ์ค--
๋ : (์ธ์ ๋๋์ง ์ ๊ถ๊ธํจ, ์ ์๋ง์ด๋์ ๋ค ๋ ๋๊น์ง ์์ ๋ถ์กํ ์ํฉ)
# 3) Non-blocking & Synchronous
๋ : ์ฌ์ฅ๋ ์นํจ ํ๋ง๋ฆฌ๋ง ํฌ์ฅํด์ฃผ์ธ์
์ฌ์ฅ๋ : ๋ค~ ์ฃผ๋ฌธ ๋ฐ๋ ค์ ์๊ฐ ์ข ๊ฑธ๋ฆฌ๋๊น ๋ณผ์ผ ๋ณด์๋ค ์ค์ธ์
๋ : ๋น
-- ์ฌ์ฅ๋ ์นํจ ํ๊ธฐ๋ ์ค--
(5๋ถ๋ค) ๋ : ์ ๊บผ ๋์๋์?
์ฌ์ฅ๋ : ์์ง์ด์
(10๋ถ๋ค) ๋ : ์ ๊บผ ๋์๋์?
์ฌ์ฅ๋ : ์์ง์ด์ใ
(15๋ถ๋ค) ๋ : ์ ๊บผ ๋์๋์?
์ฌ์ฅ๋ : ์์ง์ด์ใ
ใ
# 4) Non-blocking & Asynchronous
๋ : ์ฌ์ฅ๋ ์นํจ ํ๋ง๋ฆฌ๋ง ํฌ์ฅํด์ฃผ์ธ์
์ฌ์ฅ๋ : ๋ค~ ์ฃผ๋ฌธ ๋ฐ๋ ค์ ์๊ฐ ์ข ๊ฑธ๋ฆฌ๋๊น ๋ณผ์ผ ๋ณด์๋ค ์ค์ธ์
๋ : ๋น
-- ์ฌ์ฅ๋ ์นํจ ํ๊ธฐ๋ ์ค--
๋ : (์์์ ๋ค๋ฅธ ์ผ ํ๋ ์ค)
...
์ฌ์ฅ๋ : ์นํจ ๋์์ต๋๋ค
๋ : ์๋จน๊ฒ ์ต๋๋ค~